from types import resolve_bases
from flask import Blueprint,request,jsonify,redirect
import requests
from requests.api import get
from utils.db import db
from utils.comm import get_data

bp_weibo = Blueprint('weibo',__name__)






@bp_weibo.route('/weiboCallback/')
def weiboCallback():
    code = request.args.get('code')
    #微博认证地址
    access_token_url = "https://api.weibo.com/oauth2/access_token"
    #参数
    response = requests.post(access_token_url,data={
        "client_id": '3648830690',
        "client_secret": "916d80b477ccffce5d70e63b02bb1092",
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": "http://127.0.0.1:8000/users/weiboCallback/",
    })
    #因为用的requests  需要文本展示  eval可以转换任何字符串格式
    res = eval(str(response.text))
    # print(res)
    # print(res['uid'])
    #认证结束后 获取微博给的token 和uid
    
    try:
        uid = res['uid']
        token = res['access_token']
        
    except:
    #如果没有uid 跳转一个页面 类似 网页跑丢了
        uid = 0
        return redirect('http://localhost:8888/error')
    #有了uid 可以查看大用户在sf_login身份表中有无信息用到链表查询名字 有就登录 没有要绑定 相当于注册
    sql = "select u.id,u.nikename from sf_login as sf inner join users as u on sf.user_id=u.id where uid=%d"%int(uid)
    ress = db.find_one(sql)
    #如果有信息就直接拿token登录 没有要代表没注册过需要绑定注册一个信息 type=1代表已经授权过了
    if ress:
        return redirect("http://localhost:8888/bindmobile/?type=1"+'&id='+str(ress['id'])+'$name='+ress['nikename'])
    else:
        #type = 2代表授权了但是用户不在sf——login身份表中 需要注册 这个时候需要uid，token，webfrom（那个网站这边是新浪）
        return redirect("http://localhost:8888/bindmobile/?type=1"+'&uid='+str(uid)+'$token='+token)


@bp_weibo.route('/bindMobile/',methods=['POST','GET'])
def bindMobile():
    if request.method == 'POST':
        #绑定uid  token mobile
        data = get_data()
        #根据手机号查看邮箱是否绑定
        sql = "select id from sf_login where email='%s'"%data['mobile']
        res = db.find_one()
        if res:
            return jsonify({"code":10010,'mas':'邮箱已存在,不能再次绑定'})
        else:
            #现在用户表里注册信息
            sql = "insert into users(`email`) values('%s')"%data['mobile']
            db.insert(sql)
            #查询新注册的email 的id 构造身份表
            sql1 = "select id form users wherer email='%s'"%(data['meobile'])
            user = db.find_one(sql1)
            #添加到三方表里
            sql2= "insert into sf_login(`user_id`,`platfrom`,`uid`,`token`) values(%d,'weibo',%d,'%s')"%(int(user['id']),int(data['uid']),data['token'])
            db.insert(sql2)
            return jsonify({'code':200,'id':user['id'],'name':data['mobile']})

    else:
        pass